package com.hb.core.pojo.project.section.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.hb.core.pojo.OrganizeInfo;
import com.hb.core.pojo.RoleDataAuthEntity;
import com.hb.core.pojo.project.section.entity.BidSection;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.fzzn.core.model.enums.AuditStatusEnum;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * 采购方案/标段(包)信息表
 * </p>
 *
 * @author zhongdl
 * @since 2021-09-03
 */
@Setter
@Getter
@ApiModel(value = "标段数据模型", description = "标段数据模型")
public class BidSectionDTO extends BidSection {
    /**
     * 数据权限对象
     */
    private RoleDataAuthEntity dataAuth;

    @ApiModelProperty(value = "标段状态名称, 关联字典")
    private String sectionStatusName;

    @ApiModelProperty(value = "标段状态Code, 关联字典")
    private Integer sectionStatusCode;

    @ApiModelProperty(value = "标段ID")
    private Long sectionId;

    @ApiModelProperty(value = "项目编号")
    private String projectCode;

    @ApiModelProperty(value = "项目名称")
    private String projectName;

    @ApiModelProperty(value = "最高限价信息, JSON格式的字符串")
    private String limitPriceConfig;

    @ApiModelProperty(value = "项目分类, 1: 工程, 2: 货物, 3: 服务(关联字典)")
    private String projectType;

    @ApiModelProperty(value = "采购方式")
    private Integer bidWay;

    @ApiModelProperty(value = "项目分类, 关联字典")
    private String projectTypeName;

    @ApiModelProperty(value = "项目类型名称")
    private String bidWayName;

    @ApiModelProperty(value = "评标时间")
    @JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime evaluationStartTime;

    @ApiModelProperty(value = "文件售价")
    private BigDecimal documentSalePrice;

    @ApiModelProperty(value = "公告标题")
    private String noticeTitle;

    @ApiModelProperty(value = "公告id")
    private Long noticeId;


    @ApiModelProperty(value = "投标人ID")
    private Long bidderId;

    @ApiModelProperty(value = "组织机构Id")
    private Long orgId;

    @ApiModelProperty(value = "是否报名(1: 报名成功, 2: 已保存, 3: 报名未通过 4 报名中)")
    private Integer signupStatus;

    @ApiModelProperty(value = "是否报名(1: 报名成功, 2: 已保存, 3: 报名未通过 4 报名中)")
    private String signupStatusName;

    @ApiModelProperty(value = "项目招标类型: 1: 公开, 2: 邀请")
    private Integer commonType;


    /**
     * 项目模块 1 建设工程 2 政府采购 3 企业采购
     */
    @ApiModelProperty(value = "项目模块 1 建设工程 2 政府采购 3 企业采购")
    private Integer projectModule;

    @ApiModelProperty(value = "是否报名")
    private Integer signUpFlag;

    @ApiModelProperty(value = "是否支付成功")
    private Integer payStatus;


    @ApiModelProperty(value = "是否下载")
    private Integer downLoadFlag;

    @ApiModelProperty(value = "联合体投标")
    private String consortiumBiddingFlagName;

    /**
     * 该字段为前端显示字段
     * 记录当前标段数据所在标段状态
     */
    @ApiModelProperty(value = "标段状态列表")
    private List<?> displaySectionStatus;
    @ApiModelProperty(value = "当前标段标识")
    private Integer currentSectionStatusSign;

    /**
     * 当前标段状态的简写, 用于前端标段列表的标段状态显示
     */
    private String simpleName;

    /**
     * 是否缴纳保证金
     */
    private String bondFlagName;

    /**
     * 价款形式 1 金额 2 比例 3 费率
     */
    private String priceFormName;


    /**
     * 保证金缴纳方式  1 银行转账 2 电子保函 3 其他
     */
    private String bondPayTypeName;


    /**
     * 是否返回分页对象
     * 为 1 时返回分页对象
     * 为 2 时返回数组
     */
    private Integer pageFlag;

    /**
     * 标段信息集合, 返回类型参考字段pageFlag
     *
     * @see BidSectionDTO#pageFlag
     */
    private Object bidSectionList;

    /**
     * 其他查询条件
     * 1: 查询标段时过滤掉已经发布过首次公告的
     * 2: 查询标段时过滤掉已经保存或发布过招标文件的
     *
     * @see com.hb.trade.project.section.manager.BidSectionManager#buildQueryType(com.baomidou.mybatisplus.core.conditions.query.QueryWrapper)
     */
    private Integer queryType;
    /**
     * 需要传入的值
     */
    private Serializable queryValue;
    /**
     * 新建项目导入模板是 需要返回前端收款码信息
     */
    // private OrgCollection orgCollection;


    @ApiModelProperty(value = "标段标题，投诉异议使用")
    private String title;
    @ApiModelProperty(value = "当前用户角色首页使用：1、招标人/代理机构 2、投标人")
    private Integer roleSign;

    @ApiModelProperty(value = "月份")
    private Integer month;
    @ApiModelProperty(value = "年份")
    private Integer year;

    /* 收款方式详情字段 start */
    @ApiModelProperty(value = "收款方(系统使用费)")
    private String sysPayee;

    @ApiModelProperty(value = "收款方式(系统使用费) 1 支付宝 2 微信 3 银联")
    private Integer sysPayType;

    @ApiModelProperty(value = "银行账号(系统使用费)")
    private String sysBankAccount;

    @ApiModelProperty(value = "银行户名(系统使用费)")
    private String sysBankAccountName;

    @ApiModelProperty(value = "开户行(系统使用费)")
    private String sysBankDeposit;

    @ApiModelProperty(value = "收款码(系统使用费)")
    private String sysCollectionCode;
    /* 收款方式详情字段 end */

    /**
     * 订单支付状态
     * PAY_SUCCESS(1, "支付成功"),
     * UN_PAY(2, "待支付"),
     * PAY_FAIL(3, "支付失败"),
     * SAVED(4, "已保存");
     *
     * @see com.hb.core.pojo.enums.PayStatusEnum
     */
    @ApiModelProperty(value = "订单支付状态 - 1: 支付成功(待审核), 2: 待支付, 3: 支付失败 4: 已保存")
    private Integer orderStatus;

    /**
     * 订单的审核状态仅针对于线下付款的数据, 上传付款凭证之后由系统指定用户审核
     * 对于对接了支付宝, 微信等第三方的支付数据, 该字段没有意义
     * SAVED(0, "已保存"),
     * PASSED(1, "审核通过"),
     * WAITING(2, "审核中"),
     * REJECTED(3, "已驳回");
     *
     * @see AuditStatusEnum
     */
    @ApiModelProperty(value = "订单审核状态")
    private Integer auditStatus;

/*    @ApiModelProperty(value = "收款方式ID(关联au_org_collection表主键)")
    private Long collectionId;*/

    /**
     * @see com.hb.core.pojo.enums.FeeTypeEnum
     */
    @ApiModelProperty(value = "费用类型")
    private Integer feeType;

    @ApiModelProperty(value = "代理机构信息")
    private OrganizeInfo agencyOrganizeInfo;

    @ApiModelProperty(value = "采购单位(招标单位)")
    private OrganizeInfo biddingOrganizeInfo;

    @ApiModelProperty(value = "开标状态(0:未开标 1:签到 2:开标 3:解密 4:解密结束 5:唱标 6:确认 7:结束 8:流标)")
    private Integer openBidStatus;

    @ApiModelProperty(value = "开标状态名称")
    private String openBidStatusName;

    @ApiModelProperty(value = "判断是否展示超过澄清答疑时间的标段 1，展示  其他不展示")
    private Integer byClarificationSubmissionEndTime;


    @ApiModelProperty(value = "标书递交数量")
    private Integer submitNum;

    @ApiModelProperty(value = "开标截止的秒数-首页需要")
    private Long endOpenBidTime;


    @ApiModelProperty(value = "解密后的投标企业id")
    private List<Long> decryptOrgIdList;

    @ApiModelProperty(value = "是否被选中(邀请书编辑)")
    private Integer active;

    @ApiModelProperty(value = "已经被选中的标段列表(邀请书编辑)")
    private Set<Long> activeIdList;
}
